#include <iostream>
#include <string>
#include <memory>
#include <sstream>
#include <jsoncpp/json/json.h>

//json序列化
std::string serialize(const Json::Value& val)
{
    std::stringstream ss;

    //创建一个工厂类对象
    Json::StreamWriterBuilder swb;
    //创建派生类对象
    std::unique_ptr<Json::StreamWriter> sw(swb.newStreamWriter());
    sw->write(val, &ss);

    return ss.str();
}

//反序列化
Json::Value unserialize(const std::string& str)
{
    Json::Value ret;

    //创建一个工厂类对象
    Json::CharReaderBuilder crb;
    //创建派生类对象
    std::unique_ptr<Json::CharReader> cr(crb.newCharReader());
    cr->parse(str.c_str(), str.c_str() + str.size(), &ret, nullptr);
    return ret;
}

int main()
{
    Json::Value student;
    student["姓名"] = "小明";
    student["年龄"] = 18;
    student["成绩"].append(88.5);
    student["成绩"].append(90);

    Json::Value x;
    x["书籍"] = "西游记";
    x["运动"] = "游泳";
    student["爱好"] = x;

    std::string s = serialize(student);
    std::cout << s << std::endl;

    s = R"({"姓名" : "小黑", "年龄" : 19})";
    Json::Value stu = unserialize(s);
    std::cout << stu["姓名"].asString() << std::endl;
    std::cout << stu["年龄"].asInt() << std::endl;

    return 0;
}